home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2001 May / SGI Freeware 2001 May - Disc 2.iso / dist / fw_nas.idb / usr / freeware / include / nas / Alibnet.h.z / Alibnet.h
C/C++ Source or Header  |  2001-04-12  |  10KB  |  350 lines

  1. /*
  2.  * Copyright 1993 Network Computing Devices, Inc.
  3.  *
  4.  * Permission to use, copy, modify, distribute, and sell this software and
  5.  * its documentation for any purpose is hereby granted without fee, provided
  6.  * that the above copyright notice appear in all copies and that both that
  7.  * copyright notice and this permission notice appear in supporting
  8.  * documentation, and that the name Network Computing Devices, Inc. not be
  9.  * used in advertising or publicity pertaining to distribution of this 
  10.  * software without specific, written prior permission.
  11.  * 
  12.  * THIS SOFTWARE IS PROVIDED 'AS-IS'.  NETWORK COMPUTING DEVICES, INC.,
  13.  * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT
  14.  * LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NONINFRINGEMENT.  IN NO EVENT SHALL NETWORK
  16.  * COMPUTING DEVICES, INC., BE LIABLE FOR ANY DAMAGES WHATSOEVER, INCLUDING
  17.  * SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, INCLUDING LOSS OF USE, DATA,
  18.  * OR PROFITS, EVEN IF ADVISED OF THE POSSIBILITY THEREOF, AND REGARDLESS OF
  19.  * WHETHER IN AN ACTION IN CONTRACT, TORT OR NEGLIGENCE, ARISING OUT OF OR IN
  20.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  21.  * 
  22.  * $Id: Alibnet.h,v 1.2 1999/07/08 00:51:31 jon Exp $
  23.  * $NCDId: @(#)Alibnet.h,v 1.8 1995/12/06 01:16:57 greg Exp $
  24.  */
  25.  
  26. /* Portions derived from */
  27. /* $XConsortium: Xlibnet.h,v 1.19 92/10/21 10:22:55 rws Exp $ */
  28.  
  29. /*
  30. Copyright 1991 Massachusetts Institute of Technology
  31.  
  32. Permission to use, copy, modify, distribute, and sell this software and its
  33. documentation for any purpose is hereby granted without fee, provided that
  34. the above copyright notice appear in all copies and that both that
  35. copyright notice and this permission notice appear in supporting
  36. documentation, and that the name of M.I.T. not be used in advertising or
  37. publicity pertaining to distribution of the software without specific,
  38. written prior permission.  M.I.T. makes no representations about the
  39. suitability of this software for any purpose.  It is provided "as is"
  40. without express or implied warranty.
  41. */
  42. /*
  43.  * Xlibnet.h - Xlib networking include files for UNIX Systems.
  44.  */
  45.  
  46. #ifndef _NCD_ALIBNET_H_
  47. #define _NCD_ALIBNET_H_
  48.  
  49. #ifndef AU_UNIX_PATH
  50. #ifdef hpux
  51. #define AU_UNIX_PATH "/usr/spool/sockets/ncdaudio/"
  52. #define OLD_UNIX_PATH "/tmp/.ncdaudio-unix/X"
  53. #else
  54. #define AU_UNIX_PATH "/tmp/.ncdaudio-unix/X"
  55. #endif
  56. #endif /* AU_UNIX_PATH */
  57.  
  58. #ifdef WIN32
  59. #include <winsock.h>
  60.  
  61. #define ECONNREFUSED            WSAECONNREFUSED
  62. #define sleep(x)        Sleep(x * 1000)
  63. #define TCPCONN
  64. #define BytesReadable(fd, ptr) \
  65.     ioctlsocket (fd, FIONREAD, (unsigned long *) (ptr))
  66. #endif /* WIN32 */
  67.  
  68. #ifdef STREAMSCONN
  69. #ifdef SYSV
  70. /*
  71.  * UNIX System V Release 3.2
  72.  */
  73. #define BytesReadable(fd,ptr) (_AuBytesReadable ((fd), (ptr)))
  74. #define MALLOC_0_RETURNS_NULL
  75. #include <sys/ioctl.h>
  76.  
  77. #endif /* SYSV */
  78. #ifdef SVR4
  79. /*
  80.  * TLI (Streams-based) networking
  81.  */
  82. #define BytesReadable(fd,ptr) (_AuBytesReadable ((fd), (ptr)))
  83. #include <sys/uio.h>        /* define struct iovec */
  84.  
  85. #endif /* SVR4 */
  86. #else /* not STREAMSCONN */
  87. #ifndef WIN32
  88. /*
  89.  * socket-based systems
  90.  */
  91. #include <netinet/in.h>
  92. #include <sys/ioctl.h>
  93. #include <netdb.h>
  94. #include <sys/uio.h>    /* needed for AlibInt.c */
  95. #ifdef SVR4
  96. #include <sys/filio.h>
  97. #endif
  98.  
  99. #if defined(SYSV386) && defined(SYSV)
  100. #include <net/errno.h>
  101. #include <sys/stropts.h>
  102. #define BytesReadable(fd,ptr) ioctl((fd), I_NREAD, (ptr))
  103. #else
  104. #define BytesReadable(fd, ptr) ioctl ((fd), FIONREAD, (ptr))
  105. #endif
  106. #endif /* !WIN32 */
  107.  
  108. #endif /* STREAMSCONN else */
  109.  
  110. /*
  111.  * If your BytesReadable correctly detects broken connections, then
  112.  * you should NOT define AUCONN_CHECK_FREQ.
  113.  */
  114. #define AUCONN_CHECK_FREQ 256
  115.  
  116. #ifndef AU_NOT_POSIX
  117. #ifdef _POSIX_SOURCE
  118. #include <limits.h>
  119. #else
  120. #define _POSIX_SOURCE
  121. #include <limits.h>
  122. #undef _POSIX_SOURCE
  123. #endif
  124. #endif
  125. #ifndef OPEN_MAX
  126. #ifdef SVR4
  127. #define OPEN_MAX 256
  128. #else
  129. #ifndef WIN32
  130. #include <sys/param.h>
  131. #else /* WIN32 */
  132. #include <limits.h>
  133. #endif /* WIN32 */
  134. #ifndef OPEN_MAX
  135. #ifdef NOFILE
  136. #define OPEN_MAX NOFILE
  137. #else
  138. #define OPEN_MAX NOFILES_MAX
  139. #endif
  140. #endif
  141. #endif
  142. #endif
  143.  
  144. #if OPEN_MAX > 256
  145. #undef OPEN_MAX
  146. #define OPEN_MAX 256
  147. #endif
  148.  
  149. #define MSKCNT ((OPEN_MAX + 31) / 32)
  150.  
  151. #if (MSKCNT==1)
  152. #define BITMASK(i) (1 << (i))
  153. #define MASKIDX(i) 0
  154. #endif
  155. #if (MSKCNT>1)
  156. #define BITMASK(i) (1 << ((i) & 31))
  157. #define MASKIDX(i) ((i) >> 5)
  158. #endif
  159.  
  160. #define MASKWORD(buf, i) buf[MASKIDX(i)]
  161. #define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i)
  162. #define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i)
  163. #define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i))
  164.  
  165. #if (MSKCNT==1)
  166. #define COPYBITS(src, dst) dst[0] = src[0]
  167. #define CLEARBITS(buf) buf[0] = 0
  168. #define MASKANDSETBITS(dst, b1, b2) dst[0] = (b1[0] & b2[0])
  169. #define ORBITS(dst, b1, b2) dst[0] = (b1[0] | b2[0])
  170. #define UNSETBITS(dst, b1) (dst[0] &= ~b1[0])
  171. #define _AuANYSET(src) (src[0])
  172. #endif
  173. #if (MSKCNT==2)
  174. #define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; }
  175. #define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; }
  176. #define MASKANDSETBITS(dst, b1, b2)  {\
  177.               dst[0] = (b1[0] & b2[0]);\
  178.               dst[1] = (b1[1] & b2[1]); }
  179. #define ORBITS(dst, b1, b2)  {\
  180.               dst[0] = (b1[0] | b2[0]);\
  181.               dst[1] = (b1[1] | b2[1]); }
  182. #define UNSETBITS(dst, b1) {\
  183.                       dst[0] &= ~b1[0]; \
  184.                       dst[1] &= ~b1[1]; }
  185. #define _AuANYSET(src) (src[0] || src[1])
  186. #endif
  187. #if (MSKCNT==3)
  188. #define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; \
  189.                  dst[2] = src[2]; }
  190. #define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; buf[2] = 0; }
  191. #define MASKANDSETBITS(dst, b1, b2)  {\
  192.               dst[0] = (b1[0] & b2[0]);\
  193.               dst[1] = (b1[1] & b2[1]);\
  194.               dst[2] = (b1[2] & b2[2]); }
  195. #define ORBITS(dst, b1, b2)  {\
  196.               dst[0] = (b1[0] | b2[0]);\
  197.               dst[1] = (b1[1] | b2[1]);\
  198.               dst[2] = (b1[2] | b2[2]); }
  199. #define UNSETBITS(dst, b1) {\
  200.                       dst[0] &= ~b1[0]; \
  201.                       dst[1] &= ~b1[1]; \
  202.                       dst[2] &= ~b1[2]; }
  203. #define _AuANYSET(src) (src[0] || src[1] || src[2])
  204. #endif
  205. #if (MSKCNT==4)
  206. #define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]; \
  207.                dst[2] = src[2]; dst[3] = src[3]
  208. #define CLEARBITS(buf) buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = 0
  209. #define MASKANDSETBITS(dst, b1, b2)  \
  210.                       dst[0] = (b1[0] & b2[0]);\
  211.                       dst[1] = (b1[1] & b2[1]);\
  212.                       dst[2] = (b1[2] & b2[2]);\
  213.                       dst[3] = (b1[3] & b2[3])
  214. #define ORBITS(dst, b1, b2)  \
  215.                       dst[0] = (b1[0] | b2[0]);\
  216.                       dst[1] = (b1[1] | b2[1]);\
  217.                       dst[2] = (b1[2] | b2[2]);\
  218.                       dst[3] = (b1[3] | b2[3])
  219. #define UNSETBITS(dst, b1) \
  220.                       dst[0] &= ~b1[0]; \
  221.                       dst[1] &= ~b1[1]; \
  222.                       dst[2] &= ~b1[2]; \
  223.                       dst[3] &= ~b1[3]
  224. #define _AuANYSET(src) (src[0] || src[1] || src[2] || src[3])
  225. #endif
  226.  
  227. #if (MSKCNT>4)
  228. #define COPYBITS(src, dst) bcopy((char *) src, (char *) dst,\
  229.                  MSKCNT*sizeof(AuInt32))
  230. #define CLEARBITS(buf) bzero((char *) buf, MSKCNT*sizeof(AuInt32))
  231. #define MASKANDSETBITS(dst, b1, b2)  \
  232.               { int cri;            \
  233.             for (cri=MSKCNT; --cri>=0; )    \
  234.                   dst[cri] = (b1[cri] & b2[cri]); }
  235. #define ORBITS(dst, b1, b2)  \
  236.               { int cri;            \
  237.               for (cri=MSKCNT; --cri>=0; )    \
  238.                   dst[cri] = (b1[cri] | b2[cri]); }
  239. #define UNSETBITS(dst, b1) \
  240.               { int cri;            \
  241.               for (cri=MSKCNT; --cri>=0; )    \
  242.                   dst[cri] &= ~b1[cri];  }
  243. /*
  244.  * If MSKCNT>4, then _AuANYSET is a routine defined in AlibInt.c.
  245.  *
  246.  * #define _AuANYSET(src) (src[0] || src[1] || src[2] || src[3] || src[4] ...)
  247.  */
  248. #endif
  249.  
  250. /*
  251.  *    ReadvFromServer and WritevToServer use struct iovec, normally found
  252.  *    in Berkeley systems in <sys/uio.h>.  See the readv(2) and writev(2)
  253.  *    manual pages for details.
  254.  *
  255.  *    struct iovec {
  256.  *        caddr_t iov_base;
  257.  *        int iov_len;
  258.  *    };
  259.  */
  260. #if defined(USG) && !defined(CRAY) && !defined(umips) && !defined(MOTOROLA) && !defined(uniosu) && !defined(_UIO_) && !defined(USL)
  261. struct iovec {
  262.     caddr_t iov_base;
  263.     int iov_len;
  264. };
  265. #endif /* USG */
  266.  
  267.  
  268. #if defined(STREAMSCONN) 
  269. #include "Astreams.h"
  270.  
  271. extern char _AusTypeOfStream[];
  272. extern Austream _AusStream[];
  273.  
  274. #define ReadFromServer(dpy, data, size) \
  275.     (*_AusStream[_AusTypeOfStream[dpy]].ReadFromStream)((dpy), (data), (size), \
  276.                              BUFFERING)
  277. #define WriteToServer(dpy, bufind, size) \
  278.     (*_AusStream[_AusTypeOfStream[dpy]].WriteToStream)((dpy), (bufind), (size))
  279.  
  280. #else /* else not STREAMSCONN */
  281.  
  282. /*
  283.  * bsd can read from sockets directly
  284.  */
  285. #if !defined(WIN32) 
  286. #define ReadFromServer(dpy, data, size) read((dpy), (data), (size))
  287. #define WriteToServer(dpy, bufind, size) write((dpy), (bufind), (size))
  288. #else /* WIN32 */
  289. #define ReadFromServer(dpy, data, size) recv((dpy), (data), (size), 0)
  290. #define WriteToServer(dpy, bufind, size) send((dpy), (bufind), (size), 0)
  291. #endif /* WIN32 */
  292.  
  293. #endif /* STREAMSCONN */
  294.  
  295. #ifdef ISC
  296. #ifndef USL_COMPAT
  297. #if !defined(USG) || defined(MOTOROLA) || defined(uniosu)
  298. #if !(defined(SYSV) && defined(SYSV386))
  299. #define _AuReadV readv
  300. #endif
  301. #define _AuWriteV writev
  302. #endif
  303. #endif /* !USL_COMPAT */
  304. #endif /* ISC */
  305.  
  306. #define ReadvFromServer(dpy, iov, iovcnt) _AuReadV((dpy), (iov), (iovcnt))
  307. #define WritevToServer(dpy, iov, iovcnt) _AuWriteV((dpy), (iov), (iovcnt))
  308.  
  309. _AUFUNCPROTOBEGIN
  310.  
  311. #ifndef _AuANYSET
  312. extern int
  313. _AuANYSET(
  314. #if NeedFunctionPrototypes
  315.     AuInt32 *             /* src */
  316. #endif
  317. );
  318. #endif /* !_AuANYSET */
  319.  
  320. int _AuReadV (
  321. #if NeedFunctionPrototypes
  322.     int,              /* fd */
  323.     struct iovec *,         /* iov */
  324.     int             /* iovcnt */
  325. #endif
  326. );
  327.  
  328. int _AuWriteV (
  329. #if NeedFunctionPrototypes
  330.     int,              /* fd */
  331.     struct iovec *,         /* iov */
  332.     int             /* iovcnt */
  333. #endif
  334. );
  335.  
  336. _AUFUNCPROTOEND
  337.  
  338. #ifdef WIN32
  339. typedef unsigned char * caddr_t;
  340.  
  341. struct iovec
  342. {
  343.     caddr_t   iov_base;
  344.     int  iov_len;
  345. };
  346.  
  347. #endif /* WIN32 */
  348.  
  349. #endif /* _NCD_ALIBNET_H_ */
  350.